<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Promise.then的基本用法</title>
</head>
<body>
    <script>
        new Promise((resolve,reject) => {
            reject("失败");
        }).then() //如果then中为空，继续往后执行(then和catch的参数期望是函数，传入非函数会发生值透传)
        .then(null, reason => console.log("error1" + reason)) //then中没有使用到的方法可以不写，但成功方法在前面，需要用null占位
        .then(value => console.log("success2"),reason => console.log("error2")); //每个then返回的也是一个promise对象，这边的then是对上面then返回promise对象的处理，但上面并没有说走成功还是失败，所以这次的then走默认的成功方法
    


        let p1 = new Promise((resolve,reject) => {
            reject("错误");
        });

        // promise.then也是一个promise对象
        let p2 = p1.then(
            value => {
                console.log(value);
            },
            reason => {
                console.log(reason);
            }
        );

        // 如果直接执行，为同步任务，打印p2的时候还未执行then中的微任务，所以p2为准备状态
        // console.log(p1);
        // console.log(p2);

        setTimeout(() => {
            // 如果在定时器中执行，为宏任务，打印p2的时候已经执行then中的微任务，所以p2为已执行状态
            console.log(p1);
            console.log(p2);
        },2000);
    </script>
</body>
</html>